#include <iostream>
#include <algorithm>
using namespace std;

#define MAX_N 1000
int matrixs[MAX_N + 5][MAX_N + 5];

void span_op(int n)
{
    if (n % 2 == 1)
    {
        for (int i = 1; i <= (n / 2 - 1); i++)
        {
            for (int j = 1; j <= n; j++)
            {
                if(j > i) continue;
                swap(matrixs[i][j], matrixs[n - i + 1][n - j + 1]);
            }
        }
    }
    else
    {
        for (int i = 1; i <= n / 2; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                swap(matrixs[i][j], matrixs[n - i + 1][n - j + 1]);
            }
        }        
    }
}

void symmetry(int n)
{
    for (int i = 1; i <= n / 2; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            swap(matrixs[i][j], matrixs[n - i + 1][j]);
        }
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cin >> matrixs[i][j];
        }
    }
    int q, x;
    cin >> q;
    int span = 0, symmetry_time = 0;
    while (q--)
    {
        cin >> x;
        if (x == 1)
            span++;
        else
            symmetry_time++;
    }

    span %= 2;
    symmetry_time %= 2;

    if (span)
        span_op(n);
    if (symmetry_time)
        symmetry(n);
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1;j <= n; j++)
        {
            cout << matrixs[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}